package com.ruoyi.common.imgconflate.jai;

import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

@Getter
@Slf4j
public class QrCodeImageConfig {
    /**
     * 二维码内容
     */
    private final String text;
    /**
     * 二维码宽度
     */
    private final Integer width;
    /**
     * 二维码高度
     */
    private final Integer height;
    /**
     * 二维码颜色
     */
    private final Color color;
    /**
     * 二维码图片接收对象
     */
    private final File qrCodeImgFile;
    /**
     * JAI 图片对象
     */
    private final BufferedImage qrCodeBuffer;

    /**
     * 构造函数
     *
     * @param text 二维码内容
     * @param width 二维码宽度
     * @param height 二维码高度
     * @param color 二维码颜色
     * @param qrCodeImg 二维码图片接收对象
     */
    public QrCodeImageConfig(String text, Integer width, Integer height, Color color, File qrCodeImg) {
        if (StringUtils.isBlank(text) || width == null || height == null || color == null || qrCodeImg == null) {
            throw new IllegalArgumentException("QrCodeImageParam.QrCodeImageParam 参数异常");
        }
        this.color = color;
        this.width = width;
        this.height = height;
        this.text = text;
        this.qrCodeImgFile = qrCodeImg;
        try {
            QrConfig config = new QrConfig(width, height);
            config.setBackColor(color);
            config.setMargin(1);
            QrCodeUtil.generate(text, config, qrCodeImg);
            this.qrCodeBuffer = ImageIO.read(qrCodeImg);
        } catch (IOException e) {
            throw new RuntimeException("QrCodeImageParam.QrCodeImageParam2 二维码图片配置创建异常");
        }
    }

    /**
     * 获取图片高度
     */
    public int getImageHeight() {
        return qrCodeBuffer.getHeight();
    }

    /**
     * 获取图片宽度
     */
    public int getImageWidth() {
        return qrCodeBuffer.getWidth();
    }
}
